home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / pctj1086.arc / DOTTIME.MOD < prev    next >
Text File  |  1986-07-22  |  3KB  |  97 lines

  1. IMPLEMENTATION MODULE DotTime;
  2.  
  3.  
  4.   IMPORT Terminal;
  5.   FROM SYSTEM IMPORT AX, BX, CX, DX, ES, SWI, GETREG, SETREG, CODE,
  6.        ADR;
  7.   FROM LowEGA IMPORT SetModeBios, SetUpHiRes, SetUpAlpha, DrawPoint,
  8.        SetBiosCursorPoint, BiosCRTParams; 
  9.   FROM TimeDate IMPORT GetTime, Time;
  10.   FROM RealConversions IMPORT RealToString;
  11.   FROM PointLib IMPORT Point, MakePoint;
  12.   FROM Pauses IMPORT Pause;
  13.  
  14.   CONST
  15.       HiRes = 010H;   (* Color Hi Res Mode *)
  16.       Alpha = 003H;   (* Color Alpha Mode  *)
  17.       VIDEO = 010H;   (* Video Interrupt   *)
  18.       Page0 = 0H;     
  19.       DisplayPageAddr = 0A000H;
  20.  
  21.   PROCEDURE DotTimingTest;
  22.     (* This routine paints 65000 pixels on the CRT in three ways.
  23.        The time for each method is recorded for the user to see *)
  24.     VAR t1               : REAL;
  25.         l1               : ARRAY [0..50] OF CHAR;
  26.         ok               : BOOLEAN;
  27.         j, rowbyte       : CARDINAL;
  28.         bitmasks         : ARRAY [0..7] OF CARDINAL;
  29.         Times            : ARRAY [0..5] OF Time;
  30.         byteoff,bitmask  : CARDINAL;
  31.         p                : Point;
  32.  
  33.       PROCEDURE MakeTime(Stop, Start : CARDINAL);
  34.         VAR mins : CARDINAL;
  35.       BEGIN
  36.         mins := Times[Stop].minute - Times[Start].minute;
  37.         t1 := FLOAT(mins) * 60000. + FLOAT(Times[Stop].millisec) - 
  38.                 FLOAT(Times[Start].millisec);
  39.         t1 := t1 / 1000.;
  40.         RealToString(t1, 3, 7, l1, ok);
  41.         Terminal.WriteString(l1);   Terminal.WriteLn;
  42.       END MakeTime;
  43.  
  44.   BEGIN
  45.     bitmasks[7] := 1;          bitmasks[6] := 2;
  46.     bitmasks[5] := 4;          bitmasks[4] := 8;
  47.     bitmasks[3] := 16;         bitmasks[2] := 32;
  48.     bitmasks[1] := 64;         bitmasks[0] := 128;
  49.     Pause('Dot Timing Test');
  50.     SetModeBios(HiRes);        SetUpHiRes;
  51.  
  52.        (* The first test -- direct subroutine call *)
  53.     MakePoint(p, 25, 25);    GetTime(Times[0]);
  54.     FOR j := 0 TO 65000 DO
  55.       DrawPoint(p, 4);
  56.     END;
  57.     GetTime(Times[1]);
  58.  
  59.       (* Test #2 -- Bios calls *)
  60.     MakePoint(p, 50, 50);    GetTime(Times[2]);
  61.     FOR j := 0 TO 65000 DO
  62.       SETREG(BX, 0);         SETREG(AX, 0C02h);
  63.       SETREG(CX, p.x);       SETREG(DX, p.y);
  64.       SWI(VIDEO);
  65.     END;
  66.     GetTime(Times[3]);
  67.  
  68.      (* Test #3 -- direct inline assembler code *)
  69.     MakePoint(p, 75, 75);    GetTime(Times[4]);
  70.     FOR j := 0 TO 65000 DO
  71.       rowbyte := p.x DIV 8;  GETREG(DX, bitmask);
  72.       bitmask := bitmasks[bitmask];
  73.       byteoff := CARDINAL(p.y) * BiosCRTParams.CRTCols + rowbyte;
  74.       SETREG(ES, DisplayPageAddr);    SETREG(BX, byteoff);
  75.       SETREG(CX, 1);                  SETREG(AX, bitmask);
  76.       CODE(88h, 0c4h, 0b0h, 08h, 0bah, 0ceh, 03h, 0efh, 0b8h, 02h,
  77.           0ffh, 0b2h, 0c4h, 0efh, 26h, 08ah, 2fh, 26h, 0c6h, 07h, 
  78.           00h, 88h, 0cch, 0efh, 026h, 0c6h, 07h, 0ffh, 0b4h, 0ffh, 
  79.           0efh, 0b2h, 0ceh, 0b8h, 03h, 00h, 0efh, 0b8h, 08h, 0ffh,
  80.           0efh);
  81.     END;
  82.     GetTime(Times[5]);
  83.  
  84.       (* Now to report the results on the screen *)
  85.     SetModeBios(Alpha);
  86.     MakePoint(p, 0, 6); SetBiosCursorPoint(Page0, p);
  87.     Terminal.WriteString('Subroutine time = ');
  88.     MakeTime(1, 0);
  89.     Terminal.WriteString('EGA BIOS time = ');
  90.     MakeTime(3, 2);
  91.     Terminal.WriteString('Direct In Line Code Time = ');
  92.     MakeTime(5, 4);
  93.     SetUpAlpha;
  94.     Pause('End Dot Timing Test');
  95.   END DotTimingTest;
  96. END DotTime.
  97.